#include "Clave.h"
#include "../Tests/Alumno.h"

Clave::Clave(string campoClav, Dato* dat) {
	this->campoClave = campoClav;
	this->pdato=dat;
	//aca se pide el campo clave al dato
    this->valorClave =dat->getValorCampo(campoClav);
//
	Alumno* alumno = static_cast<Alumno*> (dat);///TODO Y ESTO??
	valorClave = alumno->getDni();
}

Clave::Clave(string clave, unsigned int referencia, unsigned int hijoDer)
{
	this->setClave(clave);
	this->setReferencia(referencia);
	this->setHijoDer(hijoDer);
}

Clave::Clave() {
}

Clave::Clave(string clave, unsigned int referencia)
{
	this->setClave(clave);
	this->setReferencia(referencia);
}

Clave::~Clave() {
	// TODO Auto-generated destructor stub
}

int Clave::getTamanioClave() {
	return valorClave.size();
}

string Clave::getCampoClave() {
	return campoClave;
}

string Clave::getClave() {
	return valorClave;
}

void Clave::setClave(string nuevaClave) {
	valorClave = nuevaClave;
}

unsigned int Clave::getTamanioEnDisco()
{
	unsigned int tamanio = this->getTamanioValorConPrefijo() + Tamanios::TAMANIO_REFERENCIA;

	return tamanio;
}

unsigned int Clave::getTamanioValor()
{
	return (strlen(this->getClave().c_str())*sizeof(string));
}

unsigned int Clave::getTamanioValorConPrefijo(){
	return this->getTamanioValor() + Tamanios::TAMANIO_LONGITUD_CADENA;
}

Clave* Clave::copiar()
{
	return new Clave(this->getClave(), this->getReferencia(), this->getHijoDer());
}

int Clave::Comparar(Clave* otraClave) {

	int resultado;

	if(valorClave < otraClave->getClave())
		resultado = 1;
	else if (valorClave > otraClave->getClave())
		resultado = -1;
	else
		resultado = 0;
	return resultado;
}

bool Clave::operator < (Clave& clave){

		string estaClave = this->getClave();
		string paramClave = clave.getClave();
		return (estaClave < paramClave);
}

bool Clave::operator == (Clave& clave){

	string estaClave = this->getClave();
	string paramClave = clave.getClave();
	return (estaClave == paramClave);

}

void Clave::desSerializar(string Dato) {

	pdato= new Alumno();

	Alumno* alumno = static_cast<Alumno*> (pdato);

	//this->pdato= new Alumno();

	alumno->desSerializar(Dato);

	valorClave = alumno->getDni();

}
